/*
 * ColaRemotaTransmisorDirecto.h
 *
 *  Created on: Dec 21, 2013
 *      Author: m
 */

#ifndef COLAREMOTATRANSMISORDIRECTO_H_
#define COLAREMOTATRANSMISORDIRECTO_H_

#include "MessageQueue.h"
#include "ColaRemotaComun.h"
#include "CPrinter.h"
#include "DNSService.h"

using ipc::MessageQueue;

class ColaRemotaTransmisorDirecto
{
protected:
    MessageQueue<PaqueteColaRemota> m_colaMensajes;
public:
    ColaRemotaTransmisorDirecto() :
        m_colaMensajes( MessageQueue<PaqueteColaRemota>::get( IPC_BASEFILE, COLA_MENSAJES_BROKER ) )
    {
    }

    ~ColaRemotaTransmisorDirecto()
    {
    }

    template <class T>
    void enviarMensaje( std::string colaDestino, T dato )
    {
        int idColaDestino;
        PaqueteColaRemota msg;
        int ack;

        // Resuelvo el ID de la cola a patir del nombre
        idColaDestino = DNSService::resolve( colaDestino );

        // Armo un paquete de capa N - 1
        msg.version = 1;       // Unused
        msg.tipoPaquete = 1;   // Unused
        msg.destino = idColaDestino;
        msg.size = sizeof( T );
        memcpy( msg.data, &dato, sizeof( T ) );

        // lo pongo directamente en la cola de mensajes
        m_colaMensajes.put( msg.destino, msg );
    }

};

#endif /* COLAREMOTATRANSMISORDIRECTO_H_ */
